/**
 * 
 */
package tests;

import abstraccionesGeometricas.Intervalo;
import abstraccionesGeometricas.Punto;
import junit.framework.TestCase;
import excepciones.NoExisteInterseccion;
import funciones.Constante;
import funciones.Funcion;
import funciones.OperacionEntreFunciones;
import funciones.Potencia;
import operaciones.Operacion;
import operaciones.Suma;
import operaciones.OperacionSobreFunciones;
/**
 * @author Laura
 *
 */
public class SumaTest extends TestCase {

	private Operacion operacion;
	private Funcion funcion1;
	private Funcion funcion2;
	private Funcion funcion3;
	private Intervalo intervalo;
	
	/* (non-Javadoc)
	 * @see junit.framework.TestCase#setUp()
	 */
	@Override
	protected void setUp() throws Exception {
		super.setUp();
		this.funcion2 = new Constante(3);
		this.funcion1 = new Potencia(2);
		this.operacion = new Suma();
		this.funcion3= new OperacionEntreFunciones(funcion1,funcion2,operacion);
		intervalo= new Intervalo(0,3);
	}

	public void testAplicar(){ 
		double doble = this.operacion.aplicar(funcion1,funcion2,3d);	
		assertTrue(doble == 12d);
	}
	
	public void testDerivar(){
		double valor= OperacionSobreFunciones.calcularDerivada(funcion3, 2d);
		assertTrue(valor == 4d);
	}

	public void testIntegrar(){
		boolean bandera=false;
		double valor= OperacionSobreFunciones.calcularIntegral(funcion3, intervalo);
		if (valor>17.999999 && valor<18.0000001) bandera=true;
		assertTrue(bandera == true);
	}
	
	public void testMaximo(){
		boolean bandera=false;
		double maximo= OperacionSobreFunciones.maximo(funcion3, intervalo);
		if (maximo>11.9999 && maximo<12.0001) bandera=true;
		assertTrue(bandera == true);
	}
	
	public void testMinimo(){
		boolean bandera=false;
		double minimo= OperacionSobreFunciones.minimo(funcion3, intervalo);
		if (minimo>2.9999 && minimo<3.0001) bandera=true;
		assertTrue(bandera == true);
	}
	
	public void testInterseccion(){
		try {
		Punto inter= OperacionSobreFunciones.interseccionConOtraFuncion(funcion1,funcion2, intervalo);
		assertTrue(inter.getCoordenadaY() == 3d);
		}
		catch (NoExisteInterseccion e) {
			System.out.print("no existe interseccion");
		}
	}
}
